/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * @param {ListNode} headA
 * @param {ListNode} headB
 * @return {ListNode}
 */
var getIntersectionNode = function (headA, headB) {
  // 边界情况处理
  if (!headA || !headB) return null;

  // 初始化两个指针，分别指向两个链表的头部
  let pointerA = headA;
  let pointerB = headB;

  // 当两个指针不相等时继续遍历
  while (pointerA !== pointerB) {
    // 如果指针A到达尾部，就跳到链表B的头部，否则继续向后移动
    pointerA = pointerA ? pointerA.next : headB;
    // 如果指针B到达尾部，就跳到链表A的头部，否则继续向后移动
    pointerB = pointerB ? pointerB.next : headA;
  }

  // 当指针A和指针B相等时，要么是相交节点，要么都是null
  return pointerA;
};
